package com.landun.market.repository;

import com.landun.market.pojo.model.Category;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author jiang.chuan
 * @date 2018-05-05
 */
@Repository
public interface ICategoryRepository {
    /**
     * 查询品类详情
     *
     * @param id 品类ID
     * @return 品类
     */
    Category load(Integer id);

    /**
     * 查询所有品类
     *
     * @param status 状态
     * @return 所有品类
     */
    List<Category> findAll(@Param("status") Integer... status);

    /**
     * 根据品类IDs查询
     *
     * @param ids 品类IDs
     * @return 查询到的品类
     */
    List<Category> findByIds(Integer... ids);

    /**
     * 根据父品类ID查询所有子品类
     *
     * @param parentId 父品类ID
     * @return 查询到的品类
     */
    List<Category> findByParent(Integer parentId);

    /**
     * 查询最大的排序值
     *
     * @param parentId 1.可基于同一父品类下的排序，2.可全局排序
     * @return 最大的排序值
     */
    Integer findMaxRank(Integer parentId);

    /**
     * 查询兄弟节点最大的编码
     *
     * @param parentId 父品类ID
     * @return 最大的编码
     */
    Integer findMaxCode(Integer parentId);

    /**
     * 统计名字出现次数
     *
     * @param name      品类名字
     * @param excludeId 需要排除的品类ID
     * @return 名字出现次数
     */
    Integer countByName(@Param("name") String name, @Param("excludedId") Integer excludeId);

    /**
     * 创建品类
     *
     * @param categories 需要新增的实际数据
     * @return 处理成功的行记录数
     */
    Integer create(Category... categories);

    /**
     * 修改品类
     *
     * @param category 需要修改的品类
     * @return 处理成功的行记录数
     */
    Integer update(Category category);

    /**
     * 更新品类状态
     *
     * @param status 状态
     * @param ids    品类IDs
     * @return 处理成功的行记录数
     */
    Integer updateStatus(@Param("status") int status, @Param("ids") Integer... ids);

    /**
     * 更新品类排序
     *
     * @param rank 排序
     * @param id   品类ID
     * @return 处理成功的行记录数
     */
    Integer updateRank(@Param("rank") int rank, @Param("id") Integer id);
}
